fwrite fopen 阻塞线程 您所在的位置:网站首页 fopen w fwrite fopen 阻塞线程

fwrite fopen 阻塞线程

#fwrite fopen 阻塞线程| 来源: 网络整理| 查看: 265

我有一个用c语言编写的多线程的Linux应用程序,在i.mx6 arm上运行。 我有一个25lc256 spi eeprom映射到文件系统中。 在驱动层面上,写的速度相对较慢,没有什么可以做的。 问题是,文件函数阻塞其他线程的时间太长了。增加usleep似乎没有帮助,看来我必须做一些不同的事情,但我不清楚要改变什么。

从一个线程调用这个函数的输出是

EEprom write在522.000000 703.000000 705.000000中保存的EEprom 723.000000 662596.000000 1328858.000000捕获 -EPIPE snd_pcm_prepare

With捕获 -EPIPE snd_pcm_prepare coming from the thread where the audio buffer underran because of the blocked thread, I suppose.

int SaveCurrentConfig(void) {//EEPROM int r = 1; struct timeval tvs, tv1, tv2, tv3, tv4, tv5, tv6; gettimeofday(&tvs, NULL); printf("EEprom write\n"); pthread_mutex_lock(&eepromconfigmutex); { char * ConfigXml = BuildXmlConfig(); FILE * WriteConfig = fopen(ConfigPath, "w"); if (WriteConfig == NULL) { MyLog("Unable to open eeprom %s\n", strerror(errno)); r = 0; goto badfinish; } gettimeofday(&tv1, NULL); size_t len = strlen(ConfigXml); unsigned short CRC = ComputeChecksum(ConfigXml, len); fwrite((char*) &len, 1, sizeof (size_t), WriteConfig); gettimeofday(&tv2, NULL); fwrite((char*) &CRC, 1, 2, WriteConfig); gettimeofday(&tv3, NULL); fwrite(ConfigXml, 1, strlen(ConfigXml), WriteConfig); gettimeofday(&tv4, NULL); fseek(WriteConfig, ConfigOffset2, SEEK_SET); fwrite((char*) &len, 1, sizeof (size_t), WriteConfig); fwrite((char*) &CRC, 1, 2, WriteConfig); fwrite(ConfigXml, 1, strlen(ConfigXml), WriteConfig); gettimeofday(&tv5, NULL); fclose(WriteConfig); badfinish: free(ConfigXml); } pthread_mutex_unlock(&eepromconfigmutex); gettimeofday(&tv6, NULL); double diff1 = time_diff(tvs, tv1); double diff2 = time_diff(tvs, tv2); double diff3 = time_diff(tvs, tv3); double diff4 = time_diff(tvs, tv4); double diff5 = time_diff(tvs, tv5); double diff6 = time_diff(tvs, tv6); printf("EEprom saved in %f %f %f %f %f %f\n", diff1, diff2, diff3, diff4, diff5, diff6); return r; }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有